#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
# 主要用于操作 Python 运行时的环境相关信息，例如获取命令行参数、操作模块搜索路径等。在这里，sys.argv 会被用来获取在命令行中输入的参数信息，
# 这些参数将传递给 Django 的管理命令执行函数，以确定具体要执行的管理任务（比如启动开发服务器时的端口号指定等参数）。
import sys


def main():
    """Run administrative tasks."""
    # 设置 Django 项目的配置模块环境变量。os.environ 代表系统的环境变量集合，
    # setdefault 方法先检查 DANGO_SETTINGS_MODULE 这个环境变量是否已存在，若不存在则将其设置为 'travel.settings'。
    # 在 Django 项目里，travel.settings 一般指向包含项目所有配置信息（像数据库连接、静态文件设置等）的 settings.py 文件所在模块路径，
    # 以此确保 Django 框架能加载正确的配置来启动运行。
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'travel.settings')
    try:
        # 尝试从 django.core.management 模块中导入 execute_from_command_line 函数。这个函数是 Django 管理框架的核心函数之一，
        # 它的作用是依据传入的命令行参数来执行相应的 Django 管理命令，例如常见的 python manage.py runserver（启动开发服务器）、
        # python manage.py makemigrations（生成数据库迁移文件）、python manage.py migrate（执行数据库迁移操作）等命令
        # 都是通过这个函数来实现具体执行逻辑的。
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        # 如果在导入 execute_from_command_line 函数时出现 ImportError（导入错误），即在找不到对应的模块或函数时，
        # except 子句会捕获这个异常，并抛出一个更详细的 ImportError 提示信息。该提示信息询问用户是否确定 Django 已安装并且
        # 在 PYTHONPATH 环境变量所指定的模块搜索路径中可用，同时还提醒用户是否忘记激活虚拟环境，因为在虚拟环境未激活的情况下，
        # 可能无法正确找到 Django 相关的安装包，导致导入失败。
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    # 这行代码调用了前面成功导入的 execute_from_command_line 函数，并将 sys.argv 作为参数传递进去。
    # sys.argv 是一个包含命令行参数的列表，其中第一个元素是脚本自身的名称（比如 manage.py），
    # 后面的元素就是用户在命令行输入的具体参数内容（例如 runserver 以及对应的端口号等参数），
    # 这样 execute_from_command_line 函数就能根据这些参数来准确执行相应的 Django 管理任务了。
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()
